package br.com.ffm.praticas.teste;

import junit.framework.Assert;

import org.junit.Before;
import org.junit.Test;

import br.com.ffm.praticas.modelo.FiltroMsg;
import br.com.ffm.praticas.modelo.Mensagem;
import br.com.ffm.praticas.modelo.Pasta;
import br.com.ffm.praticas.modelo.PorAssunto;
import br.com.ffm.praticas.modelo.PorRemetente;
import br.com.ffm.praticas.modelo.SalvarCaixaEntrada;
import br.com.ffm.praticas.modelo.SalvarOutraPasta;
import br.com.ffm.praticas.modelo.Usuario;

public class FiltroMsgTest {
	
	private FiltroMsg filtro;
	private FiltroMsg filtro2;
	private Pasta pastaTeste;
	private Mensagem msg;
	private Usuario usuario;
	
	@Before
	public void setUp() throws Exception {
		pastaTeste = new Pasta("PASTA TESTE");
		filtro = new FiltroMsg("teste", new PorAssunto(), pastaTeste);
		filtro2 = new FiltroMsg("fulano", new PorRemetente(), pastaTeste);
		msg = new Mensagem("teste@teste.com", "teste2@teste.com", "Assunto teste", "Mensagem teste");
		usuario = new Usuario("teste@teste.com", "teste", "teste", "teste");
	}

	@Test
	public void testIsAplicavel() {
		Assert.assertTrue(filtro.isAplicavel(msg));
		Assert.assertFalse(filtro2.isAplicavel(msg));
	}

	@Test
	public void testRealizarAcao() {
		filtro.realizarAcao(this.usuario, this.msg, new SalvarOutraPasta());
		Assert.assertEquals(1,this.pastaTeste.getMensagens().size());
		Assert.assertTrue(this.pastaTeste.getMensagens().contains(this.msg));
		
		filtro2.realizarAcao(this.usuario, this.msg, new SalvarCaixaEntrada());
		Pasta p = usuario.buscaPasta("CAIXA DE ENTRADA");
		Assert.assertEquals(1, p.getMensagens().size());
		Assert.assertTrue(p.getMensagens().contains(this.msg));
		
		
	}

}
